<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
</body>
<script>
    // var obj = {};
    // obj.a = 1;
    // obj.b = 2;
    // obj.c = 3;
    // console.log(obj);

    // 定义对象的属性,并给对象的属性添加修饰;  (构造函数Object的方法)
    // Object.defineProperty(target,key,desc)   定义对象的属性(单个)
    // target  目标对象
    // key     添加的键名(属性名 => 字符串)
    // desc    属性描述 ({})
    
    // Object.defineProperties(target,options)    定义对象的属性(多个)
    // target  目标对象
    // options 配置 {key:desc}  键名和属性描述组成的键值对


    // Object.getOwnPropertyDescriptor(target,key)  对应键名,获取属性描述
    // Object.getOwnPropertyDescriptors(target)     对应键名,获取对象的所有属性描述

    var zhang = {}

    // Object.defineProperty(zhang,"name",{
    //     value:"张三",    // 属性值,
    //     writable:false,  // 属性是否可改写 
    //     enumerable:false, // 属性是否可以枚举(遍历)
    //     configurable:false, //属性是否可以被删除 
    // })

    // Object.defineProperty(zhang,"age",{
    //     value:"18",    // 属性值,
    //     writable:false,  // 属性是否可改写 
    //     enumerable:false, // 属性是否可以枚举(遍历)
    //     configurable:false, //属性是否可以被删除 
    // })

    Object.defineProperties(zhang,{
        name:{
            value:"张三",    // 属性值,
            writable:false,  // 属性是否可改写 
            enumerable:false, // 属性是否可以枚举(遍历)
            configurable:false, //属性是否可以被删除 
        },
        age:{
            value:"18",    // 属性值,
            writable:false,  // 属性是否可改写 
            enumerable:false, // 属性是否可以枚举(遍历)
            configurable:false, //属性是否可以被删除 
        },
        sex:{
            value:"男",    // 属性值,
            writable:false,  // 属性是否可改写 
            enumerable:false, // 属性是否可以枚举(遍历)
            configurable:false, //属性是否可以被删除 
        },
    })


    // zhang.name = "李四";
    // for(var key in zhang){
    //     console.log(key,zhang[key]);
    // }
    // console.log(delete zhang.name);

    // console.log(zhang);
    // console.log(zhang.name,zhang.age);


    // console.log(Object.getOwnPropertyDescriptor(zhang,"name"));
    // console.log(Object.getOwnPropertyDescriptors(zhang));



    var str = new String("hello world");
    console.log(Object.getOwnPropertyDescriptors(str));




</script>
</html>